/**
 *  @brief Implementacja klasy obslugujacej czcionki.
 *
 *  @file Font.cpp
 *  @author t0m_k
 *  @date 06.12.10
**/
#include "Font.h"

namespace sdl
{
	/**
	 *  @brief Przygotowuje wybrana czcionke do uzycia.
	 *  @param path Wskaznik na nazwe pliku czcionki.
	 *  @param p Rozmiar czcionki - domyslnie 10
	**/
	Font::Font(const char *path, size_t p = 10)
	{
		if(!TTF_WasInit())
			throw std::runtime_error("ttf init");

		font = TTF_OpenFont(path, p);
		if(!font)
			throw std::runtime_error("open font");
	}

	/**
	 *  @brief Zwalnia pamiec zajmowana przez dana czcionke.
	**/
	Font::~Font()
	{
		if(font)
			TTF_CloseFont(font);
	}

	/**
	 *  @brief Renderuje podany tekst na nowej powierzchni
	 *  graficznej i zwraca jej adres. 
	 *  @param text	Tekst, ktory ma zostac narysowany.
	 *  @param color Kolor jakim tekst ma byc narysowany.
	**/
	SDL_Surface* Font::render(const char *text, Uint32 color)
	const
	{
		SDL_Color cl = {
		#if SDL_BYTEORDER == SDL_BIG_ENDIAN
			.r = (color & rmask) >> 0x18,
			.g = (color & gmask) >> 0x10,
			.b = (color & bmask) >> 0x08
		#else
			.r = (color & rmask),
			.g = (color & gmask) >> 0x08,
			.b = (color & bmask) >> 0x10
		#endif
		};
		return TTF_RenderText_Solid(font, text, cl);
	}
}
